package cn.com.twoke.app.pin_dou_dou.core;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.prefs.Preferences;

/**
 * 设置管理类
 * 用于存储和管理应用程序的设置项
 */
public class Settings {

    public static final String VERSION = "v1.0.0.3";

    // 使用Preferences API来存储设置，它会将数据存储在操作系统特定的位置
    private static final Preferences prefs = Preferences.userNodeForPackage(Settings.class);
    
    // 设置项的键名
    private static final String WORKING_DIR_KEY = "working_dir";
    private static final String COLOR_SCHEME_KEY = "color_scheme";
    private static final String LOCK_ASPECT_RATIO_KEY = "lock_aspect_ratio";
    private static final String THEME_KEY = "theme";
    private static final String PARTITION_WIDTH_KEY = "partition_width";
    private static final String PARTITION_HEIGHT_KEY = "partition_height";
    
    // 默认值
    private static final String DEFAULT_WORKING_DIR = System.getProperty("user.home") + File.separator + "PinDouDou";
    private static final String DEFAULT_COLOR_SCHEME = "MARD"; // 默认使用MARD方案
    private static final boolean DEFAULT_LOCK_ASPECT_RATIO = true; // 默认锁定宽高比
    private static final String DEFAULT_THEME = "FlatLightLaf"; // 默认主题
    private static final int DEFAULT_PARTITION_WIDTH = 50; // 默认分区宽度
    private static final int DEFAULT_PARTITION_HEIGHT = 50; // 默认分区高度
    
    static {
        load();
    }
    
    /**
     * 获取工作目录
     * @return 工作目录路径
     */
    public static String getWorkingDir() {
        return prefs.get(WORKING_DIR_KEY, DEFAULT_WORKING_DIR);
    }
    
    /**
     * 设置工作目录
     * @param workingDir 工作目录路径
     */
    public static void setWorkingDir(String workingDir) {
        prefs.put(WORKING_DIR_KEY, workingDir);
    }
    
    /**
     * 获取颜色方案
     * @return 颜色方案名称
     */
    public static String getColorScheme() {
        return prefs.get(COLOR_SCHEME_KEY, DEFAULT_COLOR_SCHEME);
    }
    
    /**
     * 设置颜色方案
     * @param colorScheme 颜色方案名称
     */
    public static void setColorScheme(String colorScheme) {
        prefs.put(COLOR_SCHEME_KEY, colorScheme);
    }
    
    /**
     * 获取是否锁定宽高比
     * @return true 如果锁定宽高比，false otherwise
     */
    public static boolean isLockAspectRatio() {
        return prefs.getBoolean(LOCK_ASPECT_RATIO_KEY, DEFAULT_LOCK_ASPECT_RATIO);
    }
    
    /**
     * 设置是否锁定宽高比
     * @param lockAspectRatio true 如果锁定宽高比，false otherwise
     */
    public static void setLockAspectRatio(boolean lockAspectRatio) {
        prefs.putBoolean(LOCK_ASPECT_RATIO_KEY, lockAspectRatio);
    }
    
    /**
     * 获取主题
     * @return 主题名称
     */
    public static String getTheme() {
        return prefs.get(THEME_KEY, DEFAULT_THEME);
    }
    
    /**
     * 设置主题
     * @param theme 主题名称
     */
    public static void setTheme(String theme) {
        prefs.put(THEME_KEY, theme);
    }
    
    /**
     * 获取分区宽度
     * @return 分区宽度
     */
    public static int getPartitionWidth() {
        return prefs.getInt(PARTITION_WIDTH_KEY, DEFAULT_PARTITION_WIDTH);
    }
    
    /**
     * 设置分区宽度
     * @param partitionWidth 分区宽度
     */
    public static void setPartitionWidth(int partitionWidth) {
        prefs.putInt(PARTITION_WIDTH_KEY, partitionWidth);
    }
    
    /**
     * 获取分区高度
     * @return 分区高度
     */
    public static int getPartitionHeight() {
        return prefs.getInt(PARTITION_HEIGHT_KEY, DEFAULT_PARTITION_HEIGHT);
    }
    
    /**
     * 设置分区高度
     * @param partitionHeight 分区高度
     */
    public static void setPartitionHeight(int partitionHeight) {
        prefs.putInt(PARTITION_HEIGHT_KEY, partitionHeight);
    }
    
    /**
     * 保存所有设置
     */
    public static void save() {
        try {
            prefs.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 加载所有设置
     */
    public static void load() {
        // Preferences会自动加载，这里可以做一些初始化检查
        // 确保工作目录存在
        String workingDir = getWorkingDir();
        File dir = new File(workingDir);
        if (!dir.exists()) {
            dir.mkdirs();
        }
    }
}